package com.keitaitoys.fonteditor.gui.status;

import java.awt.Dimension;
import java.awt.Point;

import javax.swing.JLabel;

import com.keitaitoys.fonteditor.core.LocaleManager;
import com.keitaitoys.fonteditor.core.Manager;
import com.keitaitoys.fonteditor.event.LocaleChangeEvent;
import com.keitaitoys.fonteditor.event.LocaleChangeListener;

public class DimensionLabel extends JLabel implements LocaleChangeListener {

	//////////////////////////////////////////////////////////////////////
	// Description ///////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////
	// Consts ////////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	private static final String TEXT_LOCALIZE_KEY = "status.label.dimension.caption";
	private static final int MIN_WIDTH = 80;

	//////////////////////////////////////////////////////////////////////
	// Variables /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	private Dimension dimension;

	//////////////////////////////////////////////////////////////////////
	// Constructor ///////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public DimensionLabel() {
		
		Manager manager = Manager.getInstance();
		manager.registerDimensionLabel(this);
		
		LocaleManager localeManager = LocaleManager.getInstance();
		localeManager.addLocaleChangeListener(this);

		init();
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	private void init() {
		
		setEnabled(true);
		setHorizontalAlignment(JLabel.LEFT);

		localize();
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public Dimension getDimension() {
		
		return dimension;
	}
	
	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public void setDimension(Dimension dimension) {
		
		this.dimension = dimension;
		
		localize();
	}
	
	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	private void localize() {
		
		setPreferredSize(null);

		if(dimension != null) {
			
			LocaleManager localeManager = LocaleManager.getInstance();
			setText(localeManager.getValue(TEXT_LOCALIZE_KEY, dimension.width, dimension.height));
			
		} else {
			setText(null);
		}
		
		Dimension preferredSize = getPreferredSize();
		
		if(preferredSize.width < MIN_WIDTH) {
			preferredSize.width = MIN_WIDTH;
		}
		
		setPreferredSize(preferredSize);
	}
	
	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public void localeChange(LocaleChangeEvent e) {
		
		localize();
	}
}
